home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/nodes.h>
- #include <exec/lists.h>
- #include <exec/ports.h>
- #include <stdio.h>
-
- #include "pcgWindow.h"
- #include "pcgWindowClass.h"
- #include "Precognition_Utils.h"
- #include "minmax.h"
- #ifndef __GNUC__
- #include <clib/exec_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/graphics_protos.h>
- #include <clib/layers_protos.h>
- #endif
- #ifdef __GNUC__
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #include <proto/layers.h>
- #endif
- #ifdef __SASC
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #include <proto/layers.h>
- #endif
-
- #include "amigamem.h"
- /* Additions for Prototypes -- EDB */
- #include "Intuition_utils.h"
-
- extern struct IntuitionBase *IntuitionBase;
-
-
- Screen *pcgWindow_GetScreen( pcgWindow *self )
- {
- Screen *screen;
- Window *iwindow;
-
- if( iwindow = iWindow( self ) )
- screen = self->Window->WScreen;
- else
- screen = self->NewWindow.Screen;
-
- return screen;
- }
-
-
- BOOL pcgWindow_SanityCheck( pcgWindow *self,
- Point *location,
- Point *size )
- /* returns TRUE if location was changed. */
- {
- Screen *screen;
- BOOL loc_changed = FALSE;
-
- /* printf("SanityCheck before: Location=%d,%d, Size=%d,%d\n",*/
- /* location->x, location->y, size->x, size->y );*/
-
- screen = pcgWindow_GetScreen( self );
-
- if( screen != NULL )
- {
- size->x = MIN( size->x, screen->Width );
- size->y = MIN( size->y, screen->Height );
-
- /* size is now ok, so check location. */
- if( location->x + size->x >= screen->Width )
- {
- location->x = screen->Width - size->x;
- loc_changed = TRUE;
- }
- if( location->y + size->y >= screen->Height )
- {
- location->y = screen->Height - size->y;
- loc_changed = TRUE;
- }
-
- }
-
- return loc_changed;
- }
-
-
- Point pcgWindow_Location( pcgWindow *self )
- {
- Point location;
-
- struct Window *iwindow;
-
- if( iwindow = iWindow( self ) )
- {
- location.x = iwindow->LeftEdge;
- location.y = iwindow->TopEdge;
- }
- else
- {
- location = self->Location;
- }
-
- return location;
- }
-
-
- Point pcgWindow_Size( pcgWindow *self )
- {
- Point size;
-
- struct Window *iwindow;
-
- if( iwindow = iWindow( self ) )
- {
- size.x = iwindow->Width;
- size.y = iwindow->Height;
- }
- else
- {
- size = self->Size;
- }
-
- return size;
- }
-
-
-
- Point pcgWindow_SetLocation( pcgWindow *self, WORD LeftEdge, WORD TopEdge )
- {
- Point location, new_loc, size;
- WORD dx, dy;
- struct Window *iwindow;
-
- location = Location( (GraphicObject *)self );
- size = Size( (GraphicObject *)self );
- new_loc.x = LeftEdge;
- new_loc.y = TopEdge;
-
- pcgWindow_SanityCheck( self, &new_loc, &size );
-
- /*printf("pcgWindow_SetLocation\n");*/
- if( iwindow = iWindow( self ) )
- {
-
- dx = new_loc.x - location.x;
- dy = new_loc.y - location.y;
-
- MoveWindow( iwindow, dx, dy );
-
- self->Location.x = self->NewWindow.LeftEdge = iwindow->LeftEdge;
- self->Location.y = self->NewWindow.TopEdge = iwindow->TopEdge;
- }
- else
- {
- self->Location.x = self->NewWindow.LeftEdge = new_loc.x;
- self->Location.y = self->NewWindow.TopEdge = new_loc.y;
- }
-
-
- return self->Location;
- }
-
-
- Point pcgWindow_SetSize( pcgWindow *self, WORD width, WORD height )
- {
- Point size, location, new_size;
- WORD dx, dy;
- struct Window *iwindow;
-
- new_size.x = width;
- new_size.y = height;
- location = Location( (GraphicObject *)self );
- if( pcgWindow_SanityCheck( self, &location, &new_size ) )
- {
- /* In order to set this size, you have to first move the window. */
- SetLocation( (GraphicObject *)self, location.x, location.y );
- }
-
- /*printf("pcgWindow_SetSize\n");*/
- if( iwindow = iWindow( self ) )
- {
- /*printf("window is open.\n");*/
-
- size = Size( (GraphicObject *)self );
- dx = new_size.x - size.x;
- dy = new_size.y - size.y;
- /*printf("size.x,y = (%d,%d), dx,dy=(%d,%d)\n", size.x, size.y, dx, dy );*/
- SizeWindow( iwindow, dx, dy );
- self->NewWindow.Width = self->Size.x = iwindow->Width;
- self->NewWindow.Height = self->Size.y = iwindow->Height;
- }
- else
- {
- self->Size.x = self->NewWindow.Width = new_size.x;
- self->Size.y = self->NewWindow.Height = new_size.y;
- }
-
- return self->Size;
- }
-
-
- struct Window *pcgWindow_OpenWindow( pcgWindow *self )
- {
- /*printf("pcgWindow_OpenWindow\n");*/
-
- if( self->Window ) return self->Window;
-
- if( self->SharedUserPort )
- self->Window = OpenWindowWithSharedUserPort(
- &self->NewWindow, self->SharedUserPort );
- else /* normal open window. */
- self->Window = SmartOpenWindow( &self->NewWindow );
-
- if( self->Window )
- {
- self->Window->UserData = (APTR)self;
-
- if( self->MenuStrip )
- SetMenuStrip( self->Window, self->MenuStrip );
- }
- return self->Window;
- }
-
-
-
- void pcgWindow_CloseWindow( pcgWindow *self )
- {
- Window *w;
- Point size, loc;
-
- if( w = self->Window )
- {
- /* Record size and location (for possible reopen). */
- loc = Location( (GraphicObject *)self );
- size = Size( (GraphicObject *)self );
-
- if( w->MenuStrip ) ClearMenuStrip( w );
-
- if( self->SharedUserPort )
- {
- /* Cannot simply close a SharedUserPort window, because
- * Intution will deallocate the UserPort, and some other
- * applications may be using them. (Instant GURU)
- */
- CloseWindowWithSharedUserPort( w );
- }
- else
- CloseWindow( w );
-
- self->Window = NULL;
-
- SetSize( (GraphicObject *)self, size.x, size.y );
- SetLocation( (GraphicObject *)self, loc.x, loc.y );
- }
- }
-
- pcgWindow *pcgWindow_InteractorWindow( pcgWindow *self ) { return self; }
-
-
- Gadget *pcgWindow_FirstGadget( pcgWindow *self )
- {
- Gadget *g;
- struct Window *iwindow;
-
- if( iwindow = iWindow( self ) )
- {
- g = iwindow->FirstGadget;
- }
- else
- {
- g = self->NewWindow.FirstGadget;
- }
- return g;
- }
-
-
- USHORT pcgWindow_nGadgets( pcgWindow *self )
- {
- Gadget *g;
- USHORT count = 0;
-
- for( g = FirstGadget( (Interactor *)self ); g != NULL; g = g->NextGadget )
- count++;
-
- return count;
- }
-
-
- ULONG pcgWindow_IDCMPFlags( pcgWindow *self )
- {
- struct Window *iwindow;
-
- if( iwindow = iWindow( self ) )
- return iwindow->IDCMPFlags;
- else
- return self->NewWindow.IDCMPFlags;
- }
-
-
- USHORT pcgWindow_ClaimEvent( pcgWindow *self, IntuiMessage *event )
- {
- struct Window *iwindow;
- USHORT response = 0;
- Interactor *iactor;
-
- if( iwindow = iWindow( self ) )
- {
- if( event->IDCMPWindow = iwindow )
- {
- response = RESPONDED;
-
- for( iactor = self->FirstInteractor; iactor != NULL; iactor = iactor->Next )
- {
- response |= ClaimEvent( iactor, event );
- if( response & CONSUMED_EVENT )
- break;
- }
- }
- }
- return response;
- }
-
-
- void pcgWindow_AddGraphicObject( pcgWindow *window,
- GraphicObject *graphic )
- {
- GraphicObject *g;
-
- if( window->FirstGraphic )
- {
- for( g = window->FirstGraphic;
- g->Next != NULL;
- g = g->Next );
-
- g->Next = graphic;
- }
- else
- window->FirstGraphic = graphic;
- }
-
- void pcgWindow_RemoveGraphicObject( pcgWindow *window,
- GraphicObject *graphic )
- {
- GraphicObject *g;
-
- if( window->FirstGraphic )
- {
- if( window->FirstGraphic == graphic )
- {
- window->FirstGraphic = graphic->Next;
- }
- else
- {
- for( g = window->FirstGraphic;
- g != NULL;
- g = g->Next )
- {
- if( g->Next == graphic )
- {
- g->Next = graphic->Next;
- break;
- }
- }
- }
- }
- graphic->Next = NULL;
- }
-
-
- void pcgWindow_AddInteractor( pcgWindow *window,
- Interactor *interactor )
- {
- Interactor *iactor;
- ULONG flags;
- struct Window *iwindow;
-
- SetInteractorWindow( interactor, window );
-
- if( nGadgets( interactor ) ) /* Interactor has gadget(s) */
- {
- if( iwindow = iWindow( window ) )
- {
- AddGList( iwindow, FirstGadget( interactor ),
- (USHORT) ~0, nGadgets( interactor ), NULL );
- }
- else
- {
- /* Add Gadgets to last gadget of window. */
- if( window->NewWindow.FirstGadget )
- {
- ChainGadgets( window->NewWindow.FirstGadget,
- FirstGadget( interactor ) );
- }
- else
- window->NewWindow.FirstGadget = FirstGadget( interactor );
-
- }
- }
-
- /* add this interactor to chain of interactors. */
- if( window->FirstInteractor )
- {
- for( iactor = window->FirstInteractor;
- iactor->Next != NULL;
- iactor = iactor->Next );
-
- iactor->Next = interactor;
- }
- else
- window->FirstInteractor = interactor;
-
- /* Add IDCMP flags */
-
- flags = IDCMPFlags( (Interactor *)window ) | IDCMPFlags( interactor );
- SetIDCMPFlags( window, flags );
-
- /*printf( "AddIActor: %s IDCMPFlags=%d\n",*/
- /* PClassName( interactor ), IDCMPFlags(interactor) );*/
- }
-
-
- ULONG pcgWindow_SetIDCMPFlags( pcgWindow *self, ULONG newflags )
- {
- struct Window *iwindow;
- self->NewWindow.IDCMPFlags = newflags;
-
- /*printf( "SetIDCMPFlags: %d\n", newflags );*/
- if( iwindow = iWindow( self ) ) /* window is open */
- {
- ModifyIDCMP( iwindow, newflags );
- }
-
- return IDCMPFlags( (Interactor *)self );
- }
-
-
-
- struct RastPort *pcgWindow_RPort( pcgWindow *self )
- {
- if( self->Window )
- return self->Window->RPort;
- return NULL;
- }
-
-
-
- void pcgWindow_Refresh( pcgWindow *window )
- {
- GraphicObject *graphic;
- Interactor *interactor;
- RastPort *rport;
- struct Window *iwindow;
-
- if( iwindow = iWindow( window ) )
- {
- rport = RPort( window );
-
- /* Removed RefreshWindowBorder(); call
- * -- caused lock-ups sometimes,
- * when user rapidly resizes window
- * -- EDB */
-
- /* This may not be necessary -- EDB */
- /* Lock the Window's layer so its size will not change during refresh */
- LockLayer( NULL, iwindow->WLayer );
-
- /* do our work while window's layer is locked */
-
- /* Draw window graphics */
- for( graphic = window->FirstGraphic;
- graphic != NULL;
- graphic = graphic->Next )
- {
- Render( graphic, rport );
- }
-
- /* Draw interactors */
- for ( interactor = window->FirstInteractor;
- interactor != NULL;
- interactor = interactor->Next )
- {
- Refresh( interactor );
- }
-
- /* Unlock the Window's layer so normal operations can resume */
- UnlockLayer( iwindow->WLayer );
-
-
- }
- }
-
-
- BOOL pcgWindow_Activate( pcgWindow *self, BOOL activate )
- {
- struct Window *iwindow;
-
- if( iwindow = iWindow( self ) )
- {
- if( activate )
- {
- ActivateWindow( iwindow );
- }
- }
- return isActive( (Interactor *)self );
- }
-
-
-
- #define DONT_CHANGE_SCREEN_TITLE ((char*)-1)
-
- BOOL pcgWindow_SetTitle( pcgWindow *self,
- char *title )
- {
- struct Window *iwindow;
- char *t;
-
- Afree( Title( (GraphicObject *)self ) );
- t = Astrdup( title );
-
- if( iwindow = iWindow( self ) )
- {
- SetWindowTitles( iwindow, t, DONT_CHANGE_SCREEN_TITLE );
- }
-
- self->NewWindow.Title = t;
- return TRUE;
- }
-
- char *pcgWindow_Title( pcgWindow *self )
- {
- return (char *)self->NewWindow.Title;
- }
-
- struct Window *pcgWindow_iWindow( pcgWindow *self )
- {
- return self->Window;
- }
-
-
- struct Window *pcgOpenWindow( pcgWindow *self )
- {
- struct pcgWindowClass *class;
- struct Window *result = NULL;
-
- /*printf( "pcgOpenWindow\n" );*/
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->OpenWindow )
- result = (*class->OpenWindow)( self );
- }
-
- if( result )
- Refresh( (Interactor *)self );
-
- return result;
- }
-
-
- void pcgCloseWindow( pcgWindow *self )
- {
- struct pcgWindowClass *class;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->CloseWindow )
- (*class->CloseWindow)( self );
- }
- }
-
-
- struct Window *iWindow( pcgWindow *self )
- {
- struct pcgWindowClass *class;
- struct Window *result = NULL;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->iWindow )
- result = (*class->iWindow)( self );
- }
- return result;
- }
-
- RastPort *RPort( pcgWindow *self )
- {
- struct pcgWindowClass *class;
- struct RastPort *result = NULL;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->RPort )
- result = (*class->RPort)( self );
- }
- return result;
- }
-
-
- ULONG SetIDCMPFlags( pcgWindow *self, ULONG flags )
- {
- struct pcgWindowClass *class;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->SetIDCMPFlags )
- flags = (*class->SetIDCMPFlags)( self, flags );
- }
- return flags;
- }
-
-
- void AddGraphicObject( pcgWindow *self, GraphicObject *graphic )
- {
- struct pcgWindowClass *class;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->AddGraphicObject )
- (*class->AddGraphicObject)( self, graphic );
- }
- }
-
- void RemoveGraphicObject( pcgWindow *self, GraphicObject *graphic )
- {
- struct pcgWindowClass *class;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->RemoveGraphicObject )
- (*class->RemoveGraphicObject)( self, graphic );
- }
- }
-
- void AddInteractor( pcgWindow *self, Interactor *interactor )
- {
- struct pcgWindowClass *class;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->AddInteractor )
- (*class->AddInteractor)( self, interactor );
- }
- }
-
- void RemoveInteractor( pcgWindow *self, Interactor *interactor )
- {
- struct pcgWindowClass *class;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->RemoveInteractor )
- (*class->RemoveInteractor)( self, interactor );
- }
- }
-
- void AddWindowPObject( pcgWindow *window, GraphicObject *obj )
- {
- if( isa( (PObject *)obj, InteractorClass() ) )
- AddInteractor( window, (Interactor*) obj );
- else
- AddGraphicObject( window, obj );
- }
-
- void RemoveWindowPObject( pcgWindow *window, GraphicObject *obj )
- {
- if( isa( (PObject *)obj, InteractorClass() ) )
- RemoveInteractor( window, (Interactor*) obj );
- else
- RemoveGraphicObject( window, obj );
- }
-
-
-
- void AddMenuStrip( pcgWindow *self, Menu *menustrip )
- {
- struct pcgWindowClass *class;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->AddMenuStrip )
- (*class->AddMenuStrip)( self, menustrip );
- }
- }
-
- void RemoveMenuStrip( pcgWindow *self )
- {
- struct pcgWindowClass *class;
-
- if( class = (struct pcgWindowClass *)self->isa )
- {
- if( class->RemoveMenuStrip )
- (*class->RemoveMenuStrip)( self );
- }
- }
-
- void pcgWindow_RemoveIactorGadgets( pcgWindow *self,
- Interactor *interactor )
- {
- Gadget *gadget, *prev_gadget, *next_gadget, *last_gadget;
- USHORT i, ngadgets;
- struct Window *iwindow;
-
- if( gadget = FirstGadget( interactor ) )
- {
- ngadgets = nGadgets( interactor );
- if( iwindow = iWindow( self ) ) /* window is open. */
- {
- RemoveGList( iwindow, gadget, ngadgets );
- }
- else /* window is not open. */
- {
- next_gadget = gadget;
-
- for( i = 0; i < ngadgets; i++ )
- {
- last_gadget = next_gadget;
- next_gadget = next_gadget->NextGadget;
- }
- last_gadget->NextGadget = NULL;
-
- if( self->NewWindow.FirstGadget == gadget )
- {
- self->NewWindow.FirstGadget = next_gadget;
- }
- else
- {
- for( prev_gadget = self->NewWindow.FirstGadget;
- prev_gadget != NULL;
- prev_gadget = prev_gadget->NextGadget )
- {
- if( prev_gadget->NextGadget == gadget )
- {
- prev_gadget->NextGadget = next_gadget;
- break;
- }
- }
- }
- }
- }
-
- }
-
- void pcgWindow_RemoveInteractor( pcgWindow *self,
- Interactor *interactor )
- {
- Interactor *iactor;
- ULONG flags = 0;
-
- SetInteractorWindow( interactor, NULL );
-
- if( self->FirstInteractor )
- {
- if( self->FirstInteractor == interactor )
- self->FirstInteractor = interactor->Next;
- else
- {
- for( iactor = self->FirstInteractor;
- iactor != NULL;
- iactor = iactor->Next )
- {
- if( iactor->Next == interactor )
- {
- iactor->Next = interactor->Next;
- pcgWindow_RemoveIactorGadgets( self, interactor );
- break;
- }
- }
- }
- interactor->Next = NULL;
-
- }
-
-
- /* Compute needed IDCMP flags w/o this responder. */
- flags = self->IDCMPFlags;
- for( iactor = self->FirstInteractor;
- iactor != NULL;
- iactor = iactor->Next )
- flags |= IDCMPFlags( iactor );
-
- SetIDCMPFlags( self, flags );
- }
-
- BOOL pcgWindow_EnableIactor( pcgWindow *self, BOOL enable )
- {
- Window *iwindow;
- Interactor *iactor;
- Gadget *gadget;
- Menu *menu;
- UWORD mcount;
-
- if( iwindow = self->Window )
- {
- iactor = self->FirstInteractor;
- gadget = ( iactor ) ? FirstGadget( iactor ) : NULL;
-
- if( enable )
- {
- if( gadget )
- AddGList( iwindow, gadget, nGadgets( (Interactor *)self ), -1, NULL );
-
- SetIDCMPFlags( self, self->NewWindow.IDCMPFlags );
- /* enable menus. */
- for( menu = iwindow->MenuStrip, mcount=0;
- menu != NULL;
- menu = menu->NextMenu, mcount++ )
- OnMenu( iwindow, mcount | (NOITEM<<5) );
-
- ClearPointer( iwindow );
-
- }
- else /* disable it. */
- {
- if( gadget )
- RemoveGList( iwindow, gadget, -1 );
-
- if( self->SharedUserPort )
- {
- /* Can't set IDCMPport to NULL if its shared. */
- ModifyIDCMP( iwindow, REFRESHWINDOW );
- }
- else
- {
- ModifyIDCMP( iwindow, 0 );
- }
-
- SetWaitPointer( iwindow );
-
- /* disable menus. */
- for( menu = iwindow->MenuStrip, mcount=0;
- menu != NULL;
- menu = menu->NextMenu, mcount++ )
- OffMenu( iwindow, mcount | ( NOITEM << 5 ) );
-
- }
- }
- else return FALSE;
- }
-
-
- void pcgWindow_AddMenuStrip( pcgWindow *window, Menu *menustrip )
- {
- if( window->MenuStrip ) /* window already has a menu */
- {
- RemoveMenuStrip( window );
- }
-
- window->MenuStrip = menustrip;
- if( window->Window ) /* Window is open */
- {
- SetMenuStrip( window->Window, menustrip );
- }
- }
-
-
- void pcgWindow_RemoveMenuStrip( pcgWindow *window )
- {
- window->MenuStrip = NULL;
- if( window->Window ) /* its open. */
- {
- ClearMenuStrip( window->Window );
- }
- }
-
- void pcgWindow_Erase( pcgWindow *self )
- {
- Window *window;
- RastPort *rport;
-
- window = iWindow( self );
- rport = RPort( self );
-
- SetDrMd ( rport, JAM2 );
- SetAPen ( rport, 0 );
- RectFill( rport, 0,0, window->Width, window->Height );
- }
-
-
-
- void pcgWindow_Render( pcgWindow *self, RastPort *dontcare )
- {
- pcgWindow_Erase( self );
- Refresh ( (Interactor *)self );
- }
-
- BOOL pcgWindow_elaborated = FALSE;
-
- struct pcgWindowClass pcgWindow_Class;
-
- void pcgWindow_CleanUp( pcgWindow *self )
- {
- pcgCloseWindow( self );
- }
-
-
- void pcgWindowClass_Init( struct pcgWindowClass *class )
- {
- InteractorClass_Init( (struct InteractorClass *) class );
- class->isa = InteractorClass();
- class->ClassName = "pcgWindow";
- class->CleanUp = (void(*)(PObject *))pcgWindow_CleanUp;
-
- class->Location = (Point(*)(GraphicObject *))pcgWindow_Location;
- class->SetLocation = (Point(*)(GraphicObject *, PIXELS, PIXELS))pcgWindow_SetLocation;
- class->Size = (Point(*)(GraphicObject *))pcgWindow_Size;
- class->AskSize = NULL;
- class->SetSize = (Point(*)(GraphicObject *, PIXELS, PIXELS))pcgWindow_SetSize;
- /*class->SizeFlags = GraphicObject_SizeFlagsAll;*/
- class->Render = (void(*)(GraphicObject *, RastPort *))pcgWindow_Render;
- class->InteractorWindow = (struct pcgWindow*(*)(Interactor *))pcgWindow_InteractorWindow;
- class->SetInteractorWindow = NULL;
- class->FirstGadget = (Gadget*(*)(Interactor *))pcgWindow_FirstGadget;
- class->nGadgets = (USHORT(*)(Interactor *))pcgWindow_nGadgets;
- class->IDCMPFlags = (ULONG(*)(Interactor *))pcgWindow_IDCMPFlags;
- class->ClaimEvent = (USHORT(*)(Interactor *, IntuiMessage *))pcgWindow_ClaimEvent;
- class->Respond = NULL;
- class->Refresh = (void(*)(Interactor *))pcgWindow_Refresh;
- class->EnableIactor = (BOOL(*)(Interactor *, BOOL))pcgWindow_EnableIactor;
- /* class->isEnabled = pcgWindow_isEnabled;*/
- class->Activate = (BOOL(*)(Interactor *, BOOL))pcgWindow_Activate;
- class->isActive = NULL; /* pcgWindow_isActive;*/
- class->SetTitle = (BOOL(*)(GraphicObject *, char *))pcgWindow_SetTitle;
- class->Title = (char*(*)(GraphicObject *))pcgWindow_Title;
-
- class->OpenWindow = pcgWindow_OpenWindow;
- class->CloseWindow = pcgWindow_CloseWindow;
- class->iWindow = pcgWindow_iWindow;
- class->RPort = pcgWindow_RPort;
- class->SetIDCMPFlags = pcgWindow_SetIDCMPFlags;
- class->AddGraphicObject = pcgWindow_AddGraphicObject;
- class->RemoveGraphicObject = pcgWindow_RemoveGraphicObject;
- class->AddInteractor = pcgWindow_AddInteractor;
- class->RemoveInteractor = pcgWindow_RemoveInteractor;
- class->AddMenuStrip = pcgWindow_AddMenuStrip;
- class->RemoveMenuStrip = pcgWindow_RemoveMenuStrip;
- }
-
-
- struct pcgWindowClass *pcgWindowClass( void )
- {
- if( ! pcgWindow_elaborated )
- {
- pcgWindowClass_Init( &pcgWindow_Class );
- pcgWindow_elaborated = TRUE;
- }
-
- return &pcgWindow_Class;
- }
-
-
-
- void pcgWindow_Init( pcgWindow *self,
- UWORD leftedge,
- UWORD topedge,
- UWORD width,
- UWORD height,
- UWORD minwidth,
- UWORD minheight,
- UWORD maxwidth,
- UWORD maxheight,
- char *title,
- ULONG IDCMPFlags,
- ULONG flags,
- struct Screen *screen )
- {
-
- Interactor_Init( (Interactor *)self );
-
- self->isa = pcgWindowClass();
- self->Window = NULL;
- self->FirstInteractor = NULL;
- self->FirstGraphic = NULL;
- self->SharedUserPort = NULL;
- self->MenuStrip = NULL;
-
- self->NewWindow.BlockPen = 1;
- self->NewWindow.DetailPen = 0;
- self->NewWindow.IDCMPFlags = self->IDCMPFlags = IDCMPFlags;
- self->NewWindow.Flags = flags;
- self->NewWindow.FirstGadget = NULL;
- self->NewWindow.CheckMark = NULL;
- self->NewWindow.Title = NULL;
- self->NewWindow.BitMap = NULL;
- self->NewWindow.MinWidth = minwidth;
- self->NewWindow.MinHeight = minheight;
- self->NewWindow.MaxWidth = maxwidth;
- self->NewWindow.MaxHeight = maxheight;
- if( screen )
- {
- self->NewWindow.Type = CUSTOMSCREEN;
- self->NewWindow.Screen = screen;
- }
- else
- {
- self->NewWindow.Type = WBENCHSCREEN;
- self->NewWindow.Screen = NULL;
- }
-
- /*
- ** Have to have an initial size before you can call
- ** SetSize or SetLocation
- */
- self->Location.x = self->NewWindow.LeftEdge = 0;
- self->Location.y = self->NewWindow.TopEdge = 0;
- self->Size.x = self->NewWindow.Width = 0;
- self->Size.y = self->NewWindow.Height = 0;
-
- SetSize( (GraphicObject *)self, width, height );
- SetLocation( (GraphicObject *)self, leftedge, topedge );
- SetTitle( (GraphicObject *)self, title );
- }
-
-
-